package com.CST.mapper.cst.cb;

import com.CST.dto.cb.CountInComeDTO;
import com.CST.dto.cb.DateDTO;
import com.CST.entity.cb.AmortizationData;
import com.CST.entity.cb.Direct;
import com.CST.entity.cb.OrganizationInfo;
import com.CST.vo.cb.ReportAmortizationDataVO;
import com.CST.vo.cb.ReportCostAccountVO;
import com.CST.vo.cb.ReportCountInComeVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface AmortizationDataMapper extends BaseMapper<AmortizationData> {
    List<AmortizationData> listAmortizationDataByDate(DateDTO dateDTO);



    List<ReportCountInComeVO> listAllCountInCome(CountInComeDTO countInComeDTO);
    List<ReportCountInComeVO> listAllCountInCome1(CountInComeDTO countInComeDTO);
    List<ReportAmortizationDataVO> listIndirectCostWithPDept(DateDTO dateDTO);

    /**
     * 获取所有临床类分摊成本
     * 即完全分摊成本
     * 条件：时间+临床
     * 通过flag控制是否查询临床类，true查询临床类，false为非临床类，不传为查询全部
     */
    List<AmortizationData> listClinicalAmortizationDataByDate(@Param("dateDTO") DateDTO dateDTO, @Param("pDeptCode") String pDeptCode, @Param("clinicalFlag") Boolean clinicalFlag, @Param("nullFlag") Boolean nullFlag);

    /**
     * 获取AmortizationData的直接成本和科室
     * 根据时间范围查询
     * 根据flag决定查询的分摊成本表
     * 0：AmortizationData
     * 1：AmortizationData1
     * 2：AmortizationData2
     * 3：AmortizationData3
     */
    List<ReportCostAccountVO> listAmountWithAccountByDate(@Param("dateDTO") DateDTO dateDTO, @Param("flag") Integer flag);

    List<ReportCostAccountVO> listAmountWithAccountByDateNew(DateDTO dateDTO);

    List<Direct> noAmortizationDept(DateDTO dateDTO);
    int deleteByYearMonth(DateDTO dateDTO);

    int insertBatchAmortizationData(List<Direct> lst);

    int deleteByYearMonth1(DateDTO dateDTO);

    int deleteByYearMonth2(DateDTO dateDTO);

    int deleteByYearMonth3(DateDTO dateDTO);

    int insertBatchAmortizationData1(List<Direct> lst);

    int insertBatchAmortizationData2(List<Direct> lst);

    int insertBatchAmortizationData3(List<Direct> lst);

    List<Direct> selectmortizationData(DateDTO dateDTO);

    List<Direct> selectmortizationData1(DateDTO dateDTO);

    List<Direct> selectmortizationData2(DateDTO dateDTO);

    List<OrganizationInfo> listNoSZPB(DateDTO dateDTO);

    List<OrganizationInfo> listNoSZPBCL(DateDTO dateDTO);

    /**
     * 根据标记和父级科室编码查询各子科室的分摊成本
     * 用于科室成本分析
     * 数据整理和归档方式类似于医院各剋是全成本表（会计分类汇总）
     * 区别在于：不需要根据AccountCode group by
     * 需要：时间范围+父级科室
     * 根据flag决定查询的分摊成本表
     * 0：AmortizationData
     * 1：AmortizationData1
     * 2：AmortizationData2
     * 3：AmortizationData3
     * @param dateDTO
     * @param pDeptCode
     * @return
     */
    List<ReportCostAccountVO> listAmortizationDataByDateAndPDeptWithDept(@Param("dateDTO") DateDTO dateDTO,
                                                                         @Param("pDeptCode") String pDeptCode,
                                                                         @Param("deptCode") String deptCode,
                                                                         @Param("flag") Integer flag,
                                                                         @Param("accountFlag") Boolean accountFlag);

    List<ReportCostAccountVO> listAmortizationDataByDateAndPDeptWithDeptNew(@Param("dateDTO") DateDTO dateDTO,
                                                                         @Param("pDeptCode") String pDeptCode,
                                                                         @Param("deptCode") String deptCode
                                                                         );

}
